package com.cd.music.controller;

import com.cd.music.annotation.Auth;
import com.cd.music.annotation.Parameter;
import com.cd.music.dto.ContentDto;
import com.cd.music.service.AdvertisingService;
import com.cd.music.service.NewsService;
import com.cd.music.utils.ResultUtil;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

/**
 * @author yxl 余秀良
 * @version 1.0
 * @description: 新闻广告控制器
 * @date 2018年03月06日  下午9:22
 * @address: 四川成都
 */
@Controller
@CrossOrigin
@RequestMapping("content")
public class ContentController {
    @Resource(name = "advertisingService")
    private AdvertisingService advertisingService;
    @Resource(name = "newsService")
    private NewsService newsService;

    /**
     * @author yxl 余秀良
     * @version 1.0
     * @description: 添加新闻
     * @date 2018年03月07日 上午9:41
     * @address: 四川成都
     */
    @Auth(roles = "admin", sign = {0, 1}, description = "只有管理员和超级管理员可以访问")
    @ResponseBody
    @PostMapping("admin/news/add")
    public String addNews(@Parameter ContentDto dto) {
        return ResultUtil.result(newsService.insert(dto));
    }

    /**
     * @author yxl 余秀良
     * @version 1.0
     * @description: 删除新闻
     * @date 2018年03月07日 上午9:41
     * @address: 四川成都
     */
    @Auth(roles = "admin", sign = {0, 1}, description = "只有管理员和超级管理员可以访问")
    @ResponseBody
    @PostMapping("admin/news/delete")
    public String deleteNews(@Parameter ContentDto dto) {
        return ResultUtil.result(newsService.delete(dto.getId()));
    }

    /**
     * @author yxl 余秀良
     * @version 1.0
     * @description: 修改新闻
     * @date 2018年03月07日 上午9:41
     * @address: 四川成都
     */
    @Auth(roles = "admin", sign = {0, 1}, description = "只有管理员和超级管理员可以访问")
    @ResponseBody
    @PostMapping("admin/news/update")
    public String updateNews(@Parameter ContentDto dto) {
        return ResultUtil.result(newsService.update(dto));
    }

    /**
     * @author yxl 余秀良
     * @version 1.0
     * @description: 查询新闻
     * @date 2018年03月07日 上午9:40
     * @address: 四川成都
     */
    @Auth(roles = "admin", sign = {0, 1}, description = "只有管理员和超级管理员可以访问")
    @ResponseBody
    @RequestMapping("admin/news/list")
    public String queryNewsList(@Parameter ContentDto dto) {
        return ResultUtil.result(newsService.select(dto));
    }

    /**
     * @author yxl 余秀良
     * @version 1.0
     * @description: 管理员查询新闻列表
     * @date 2018年03月07日 上午9:40
     * @address: 四川成都
     */
    @RequestMapping("user/news/list")
    public String userQueryNewsList(@Parameter ContentDto dto, Model model) {
        model.addAttribute("advertising", advertisingService.select(null));
        model.addAttribute("news", newsService.userQueryNewsList(dto));
        return "news";
    }

    /**
     * @author yxl 余秀良
     * @version 1.0
     * @description: 管理员查询单个新闻
     * @date 2018年03月07日 上午9:40
     * @address: 四川成都
     */
    @RequestMapping("user/news/query")
    public String userQueryOneNews(@Parameter ContentDto dto, Model model) {
        model.addAttribute("advertising", advertisingService.select(null));
        model.addAttribute("news", newsService.selectOneNews(dto));
        return "news_item";
    }
    /**
     * @author yxl 余秀良
     * @version 1.0
     * @description: 查询新闻
     * @date 2018年03月07日 上午9:40
     * @address: 四川成都
     */
    @Auth(roles = "admin", sign = {0, 1}, description = "只有管理员和超级管理员可以访问")
    @ResponseBody
    @RequestMapping("admin/news/query")
    public String queryNewsOne(@Parameter ContentDto dto) {
        return ResultUtil.result(newsService.selectOneNews(dto));
    }
    /*=====================================================================*/

    /**
     * @author yxl 余秀良
     * @version 1.0
     * @description: 添加广告
     * @date 2018年03月07日 上午9:40
     * @address: 四川成都
     */
    @Auth(roles = "admin", sign = {0, 1}, description = "只有管理员和超级管理员可以访问")
    @ResponseBody
    @PostMapping("admin/ad/add")
    public String addAdvertisement(@Parameter ContentDto dto) {
        return ResultUtil.result(advertisingService.insert(dto));
    }

    /**
     * @author yxl 余秀良
     * @version 1.0
     * @description: 删除广告
     * @date 2018年03月07日 上午9:40
     * @address: 四川成都
     */
    @Auth(roles = "admin", sign = {0, 1}, description = "只有管理员和超级管理员可以访问")
    @ResponseBody
    @Transactional(rollbackFor = Exception.class)
    @PostMapping("admin/ad/delete")
    public String deleteAdvertisement(@Parameter ContentDto dto) {
        return ResultUtil.result(advertisingService.delete(dto != null ? dto.getId() : null));
    }

    /**
     * @author yxl 余秀良
     * @version 1.0
     * @description: 查询广告
     * @date 2018年03月07日 上午9:40
     * @address: 四川成都
     */
    @Auth(roles = "admin", sign = {0, 1}, description = "只有管理员和超级管理员可以访问")
    @ResponseBody
    @RequestMapping("admin/ad/query")
    public String queryAdvertisement(@Parameter ContentDto dto) {
        return ResultUtil.result(advertisingService.select(dto));
    }

    /**
     * @author yxl 余秀良
     * @version 1.0
     * @description: 主页内容
     * @date 2018年03月07日 上午9:40
     * @address: 四川成都
     */
    @RequestMapping("index")
    public String index(Model model) {
        model.addAttribute("advertising", advertisingService.select(null));
        model.addAttribute("news", newsService.select(ContentDto.builder().pageIndex(1).pageSize(3).build()));
        return "home";
    }
}
